perm filename PUZB.SAI[226,JMC] blob
sn#005391 filedate 1972-05-29 generic text, type T, neo UTF8
00100 BEGIN "PUZZLE"
00200 REQUIRE 30000 SYSTEM_PDL;
00300 INTEGER ARRAY S[1:43,1:43],G[1:43,1:43],MM[1:43,1:43];
00400 INTEGER M,N;
00500 PRELOAD_WITH 4,2,1,2,3,1,5,2,3,3,2,2,3,5,3,2,3,2,3,2,2,3,5,1,2,
00600 3,5,1,3,2,1,3,2,3,3,2,3,1,5,3,2,1,2;
00700 INTEGER ARRAY Q[1:43];
00800
00900 FORWARD RECURSIVE INTEGER PROCEDURE CMOAN(INTEGER M,N);
01000 FORWARD RECURSIVE INTEGER PROCEDURE CGROAN(INTEGER M,N);
01100
01200 RECURSIVE INTEGER PROCEDURE CSENT(INTEGER M,N);
01300 BEGIN
01400 INTEGER T,P,R,J;
01500 IF M>N THEN RETURN(1);
01600 IF S[M,N]≠-1 THEN RETURN(S[M,N]);
01700 T←0;
01800 FOR P←M STEP 1 UNTIL N DO
01900 IF Q[P] =1 THEN T ← T+ CMOAN(M,P-1)*CGROAN(P+1,N)
02000 ELSE IF Q[P]=5 THEN BEGIN R←CGROAN(M,P-1);
02100 FOR J←P STEP 1 UNTIL N DO
02200 T← T+R*CSENT(P+1,J)*CMOAN(J+1,N) END;
02300 RETURN(S[M,N]←T) END;
02400
02500 RECURSIVE INTEGER PROCEDURE CMOAN(INTEGER M,N);
02600 BEGIN
02700 INTEGER T,P,R,J;
02800 IF M>N THEN RETURN(1);
02900 IF MM[M,N]≠-1 THEN RETURN(MM[M,N]);
03000 T←0;
03100 FOR P←M STEP 1 UNTIL N DO
03200 IF Q[P] =2 THEN T ← T+ CSENT(M,P-1)*CSENT(P+1,N)
03300 ELSE IF Q[P]=3 THEN BEGIN R←CGROAN(M,P-1);
03400 FOR J←P STEP 1 UNTIL N DO
03500 T← T+R*CMOAN(P+1,J)*CGROAN(J+1,N) END;
03600 RETURN(MM[M,N]←T) END;
03700
03800 RECURSIVE INTEGER PROCEDURE CGROAN(INTEGER M,N);
03900 BEGIN
04000 INTEGER T,P,R,J;
04100 IF M>N THEN RETURN(1);
04200 IF G[M,N]≠-1 THEN RETURN(G[M,N]);
04300 T←0;
04400 FOR P←M STEP 1 UNTIL N DO
04500 IF Q[P] =3 THEN T ← T+ CMOAN(M,P-1)*CGROAN(P+1,N)
04600 ELSE IF Q[P]=4 THEN BEGIN R←CGROAN(M,P-1);
04700 FOR J←P STEP 1 UNTIL N DO
04800 T← T+R*CSENT(P+1,J)*CGROAN(J+1,N) END;
04900 RETURN(G[M,N]←T) END;
05000
05100 FOR M←1 STEP 1 UNTIL 43 DO
05200 FOR N←1 STEP 1 UNTIL 43 DO
05300 BEGIN S[M,N]←MM[M,N]←G[M,N]←-1 END;
05400
05500 OUTSTR("
05600 "&CVS(CSENT(1,43))&"
05700 ");
05800 END;